﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace CardDataWCFService.Contracts
{
    // NOTE: If you change the interface name "IService1" here, you must also update the reference to "IService1" in Web.config.
    [ServiceContract]
    public interface ICardGameService
    {
        [OperationContract]
        bool ShuffleDeck();

        [OperationContract]
        PlayerCard GetPlayerCardByRFID(String CardRFID);

        [OperationContract]
        Player AddPlayer(Player player);

        [OperationContract]
        List<Player> GetPlayers();

        [OperationContract]
        bool DeletePlayers();

        [OperationContract]
        bool DeletePlayerByName(Player player);

        [OperationContract]
        bool DeletePlayerByID(Player player);

        [OperationContract]
        Contracts.PlayerCards TransferCardOwnership(CardDataWCFService.Contracts.HeldBy heldby);

        [OperationContract]
        Dictionary<Player, List<PlayerCards>> GetCurrentTableView();

        [OperationContract]
        string GetData(int value);

        [OperationContract]
        CompositeType GetDataUsingDataContract(CompositeType composite);

        // TODO: Add your service operations here
    }


    // Use a data contract as illustrated in the sample below to add composite types to service operations.
    [DataContract]
    public class CompositeType
    {
        bool boolValue = true;
        string stringValue = "Hello ";

        [DataMember]
        public bool BoolValue
        {
            get { return boolValue; }
            set { boolValue = value; }
        }

        [DataMember]
        public string StringValue
        {
            get { return stringValue; }
            set { stringValue = value; }
        }
    }

    [DataContract]
    public class Card
    {
        [DataMember]
        public int CardID { get; set; }

        [DataMember]
        public String CardRFID { get; set; }

        [DataMember]
        public String Suit { get; set; }

        [DataMember]
        public String Type { get; set; }

        [DataMember]
        public System.Drawing.Image Image { get; set; }
    }

    [DataContract]
    public class Player
    {
        [DataMember]
        public int PlayerID { get; set; }

        [DataMember]
        public String PlayerName { get; set; }
    }

    [DataContract]
    public class HeldBy
    {
        [DataMember]
        public int PlayerID { get; set; }

        [DataMember]
        public int CardID { get; set; }
    }

    [DataContract]
    public class PlayerCards
    {
        [DataMember]
        public int PlayerID { get; set; }

        [DataMember]
        public int CardID { get; set; }

        [DataMember]
        public string Suit { get; set; }
    
        [DataMember]
        public string Type { get; set; }

        [DataMember]
        public string CardRFID { get; set; }

        [DataMember]
        public string PlayerName { get; set; }

        [DataMember]
        public string ImageFileName { get; set; }
    }
}
